home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)ze.d64 / txt.packages < prev    next >
Text File  |  2007-03-01  |  4KB  |  205 lines

  1. ┼XTENDING ├╧═┴╠-80
  2. ------------------
  3. BY ─ICK ╦LINGENS,
  4. ─UTCH ├╧═┴╠ ╒SERS ╟ROUP
  5.  
  6. ├HAPTER 8 IN THE ┼NGLISH/─ANISH
  7. HANDBOOK FOR THE ├╧═┴╠ CARTRIDGE
  8. DESCRIBES A LARGE EXAMPLE FOR A
  9. MODULE WITH ONE PACKAGE.
  10.  
  11. ╚ERE FOLLOWS A SMALL ONE EXTENDING
  12. ├╧═┴╠-80 VS 2.01 WITH TWO STRING
  13. ARRAY FUNCTIONS. ┴N EXPLANATION IS
  14. ALSO GIVEN.
  15.  
  16. ┴LL SYMBOLS USED IN A SOURCE FILE
  17. NEED TO BE DEFINED. ╘HIS DEFINITION
  18. IS GIVEN IN THE FIRST LINES IN THE
  19. FILE.
  20.  
  21. FUNC   = 127       ;╞╒╬├
  22. ENDFNC = 126       ;┼╬─╞╒╬├
  23. PARAM  = 114
  24. VALUE  = PARAM+0
  25. REAL   = 0
  26. STR    = 2
  27. ARRAY  = 6
  28. DEFPAG = %01000110 ;MEMORY MAP
  29.  
  30. ╘HE REGISTER ├╧╨┘1 IS USED BY A
  31. ROUTINE CALLED ╞╬─╨┴╥ WITH WHICH ONE
  32. CAN ╞I╬─ THE LOCATION OF THE
  33. ╨┴╥AMETERS OF A PROCEDURE OR FUNCTION
  34. USED IN A ├╧═┴╠ PROGRAM:
  35.  
  36. COPY1  = $0045
  37.  
  38. ╘HERE ARE A LOT OF ROUTINES THAT CAN
  39. BE USED IN MODULES; THE STARTING
  40. ADDRESS OF THE ROUTINES USED IN THIS
  41. MODULE ARE DEFINED
  42.  
  43. FNDPAR = $C896
  44. PSHINT = $C9CE
  45.  
  46. ╘HE ROUTINE ╨╙╚╔╬╘ TAKES AN INTEGER
  47. WITH LOW BYTE IN THE REGISTER .╪ AND
  48. HIGH BYTE IN THE REGISTER .┴ AND
  49. PUSHES THE VALUE AS A REAL NUMBER ON
  50. THE ├╧═┴╠ STACK
  51.  
  52. DUMMY  = $CA2F
  53.  
  54. ╘HE ROUTINE ─╒══┘ PERFORMS A ╥╘╙
  55. STATEMENT (RETURN FROM SUBROUTINE).
  56. ╘HIS ROUTINE MUST BE CALLED IF THE
  57. SYNTAX OF THE MODULE NEEDS A ROUTINE
  58. WHICH IS NOT FURTHER DESCRIBED.
  59.  
  60. ═ODULES CAN BE PLACED IN DIFFERENT
  61. LOCATIONS IN ╥┴═. ╧NE OF THE
  62. LOCATIONS STARTS AT $8009, SO WE
  63. DEFINE THE START OF THE MODULE BY
  64.  
  65. *      = $8009
  66.  
  67. ╬OW THE MODULE DESCRIPTION IS GIVEN:
  68.  
  69.        .BYT DEFPAG    ;╥┴═+╦┼╥╬┴╠+╔/╧
  70.        .WOR LEND      ;LABEL AT END
  71.        .WOR DUMMY     ;NO SIGNAL
  72.        .BYT 6,'ARFUNC'
  73.  
  74. ╘HIS LINE DEFINES THE PACKAGE NAME:
  75. FIRST THE NUMBER OF CHARACTERS IN THE
  76. NAME, FOLLOWED BY THE NAME BETWEEN
  77. SINGLE QUOTES
  78.  
  79.        .WOR PRTAB  ;PACKAGE TABLE
  80.        .WOR DUMMY  ;NO INITIALISATION
  81.        .BYT 0      ;ENDS THE MODULE
  82.  
  83. ╬OW WE BUILD UP THE PACKAGE TABLE; IN
  84. THIS TABLE WE FIND ALL THE PROCEDURE
  85. OR FUNCTION HEADERS IN THE PACKAGE:
  86.  
  87. PRTAB  .BYTE 5,'ARMAX' ;ASCII NAME
  88.  
  89. ╞IRST THE NUMBER OF CHARACTERS IN THE
  90. NAME, FOLLOWED BY THE NAME BETWEEN
  91. SINGLE QUOTES
  92.  
  93.        .WOR HMAX      ;HEADER POINTER
  94.        .BYT 5,'ARMIN' ;ASCII NAME
  95.        .WOR HMIN      ;HEADER POINTER
  96.        .BYT 0         ;END OF TABLE
  97.  
  98. ╬OW THE PROCEDURE/FUNCTION HEADERS
  99. ARE GIVEN.
  100.  
  101. HMAX   .BYT FUNC+REAL,
  102.        .WOR BMAX
  103.        .BYT 1
  104.        .BYT VALUE+ARRAY+STR,1
  105.        .BYT ENDFNC
  106.  
  107. ╘HE FIRST LINE DESCRIBES THE TYPE OF
  108. THE DEFINED STRUCTURE; IN THIS CASE
  109. IT IS A REAL FUNCTION (FUNC+REAL).
  110. BMAX IS A POINTER TO THE DEFINITION
  111. OF THE FUNCTION IN MACHINE LANGUAGE;
  112. THE '1' GIVES THE NUMBER OF
  113. PARAMETERS OF THE FUNCTION. 
  114.  
  115. ╔N THE NEXT LINE(S) THE TYPE OF THESE
  116. PARAMETERS ARE DESCRIBED: THE
  117. PARAMETER IS A STRING ARRAY
  118. (ARRAY+STR) CALLED BY VALUE (VALUE+).
  119. ╘HE PARAMETER ITSELF HAS ONE
  120. PARAMETER (THE '1' ON THE LINE).
  121.  
  122. ╘HE NEXT PROCEDURE/FUNCTION HEADER IS
  123.  
  124. HMIN   .BYTE FUNC+REAL
  125.        .WOR  BMIN
  126.        .BYT  1
  127.        .BYTE VALUE+ARRAY+STR,1
  128.        .BYTE ENDFNC
  129.  
  130. ╘HIS FUNCTION HAS THE SAME TYPE AS
  131. THE FIRST. ┬EFORE WE SWITCH TO REAL
  132. MACHINE LANGUAGE, WE WILL DESCRIBE
  133. WITH WHAT KIND OF FUNCTIONS WE WANT
  134. TO EXTEND ├╧═┴╠.
  135.  
  136. ╔F A STRING ARRAY IS DEFINED WITH
  137.  
  138.   ─╔═ A$(15:38) ╧╞ 24
  139.  
  140. ╫E WANT TO HAVE AT OUR DISPOSAL THE
  141. VALUES 15 AND 38 AS THE ARRAY INDEX'S
  142. LOWER AND UPPER BOUNDS. ╘HE FUNCTIONS
  143. ┴╥═┴╪ AND ┴╥═╔╬ WILL GIVE US THESE
  144. VALUES. ╚ERE WE GO.
  145.  
  146. ╞IRST WE MUST FIND THE ADDRESS WHERE
  147. THE VALUE 38 IS STORED. ╒SING THE
  148. ROUTINE ╞╬─╨┴╥ WE CAN FIND THE
  149. INFORMATION BLOCK OF THE STRING
  150. ARRAY. ╘HE ADDRESS IS RETURNED IN
  151. ├╧╨┘1.
  152.  
  153. ╔N (├╧╨┘1)+5 AND (├╧╨┘1)+6 WE FIND
  154. THE UPPER BOUND OF THE INDEX. ╔N
  155. (├╧╨┘1)+3 AND (├╧╨┘1)+4 WE FIND THE
  156. LOWER BOUND.
  157. ╘HE STORAGE IS IN HIGH/LOW ORDER.
  158.  
  159. (├╧╨┘1)+X MEANS ADD X TO THE CONTENTS
  160. OF ├╧╨┘1.
  161.  
  162. ╘HE ROUTINE ╞╬─╨┴╥ NEEDS TO HAVE THE
  163. NUMBER OF THE PARAMETER AT REGISTER
  164. .┴:
  165.  
  166. BMAX LDA #1        ;FIRST PARAMETER
  167.      JSR FNDPAR    ;EXEC FNDPAR
  168.      LDY #6 
  169.      LDA (COPY1),Y
  170.      TAX
  171.      DEY
  172.      LDA (COPY1),Y
  173.      JSR PSHINT
  174.      RTS           ;BACK TO ├╧═┴╠
  175.  
  176. ┴ND WE DO THE SAME FOR THE FUNCTION
  177. ┴╥═╔╬:
  178.  
  179. BMIN LDA #1
  180.      JSR FNDPAR
  181.      LDY #4
  182.      LDA (COPY1),Y
  183.      TAX
  184.      DEY 
  185.      LDA (COPY1),Y
  186.      JSR PSHINT
  187.      RTS
  188. LEND .END 
  189.  
  190. ╘HE MODULE CAN BE LINKED TO THE
  191. FOLLOWING DEMONSTRATION PROGRAM,
  192. ┼╪┴═.┴╥╞╒╬├:
  193.  
  194.    ╒╙┼ ARFUNC
  195.    ─╔═ A$(15:38) ╧╞ 24
  196.    ╨╥╔╬╘ "INDEX-MIN=",ARMIN(A$())
  197.    ╨╥╔╬╘ "INDEX-MAX=",ARMAX(A$())
  198.    ┼╬─ ""
  199.  
  200. ╘HERE IS NO NEED TO ADD A PACKAGE
  201. ROUTINE WHICH TAKES CARE OF POSSIBLE
  202. ERRORS IN THE FUNCTION PARAMETERS,
  203. BECAUSE ├╧═┴╠ HANDLES THESE ERRORS IN
  204. A CORRECT WAY.
  205.